package net.suplementos.web.action;

import java.util.List;

import net.suplementos.negocio.CadastroDelegate;
import net.suplementos.pojo.FormaPagamento;
import net.suplementos.pojo.Usuario;
import net.suplementos.servico.CadastroServico;
import net.suplementos.web.LocalConstantes;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/manterFormaPagamento")
@InterceptorRefs({
	@InterceptorRef(value = "store", params = {"operationMode", "AUTOMATIC"}),
	@InterceptorRef("defaultStack")
})
public class ManterFormaPagamentoAction extends ActionSupport {

	private FormaPagamento forma;
	private List<FormaPagamento> resultadoConsulta;

	private CadastroServico cadastroServico = CadastroDelegate.getInstance();

	private static final String NOME_ENTIDADE_SINGULAR = "Forma de Pagamento";
	
	private static final String NOME_ENTIDADE_PLURAL = "Formas de Pagamento";

	@Action(value = "listar", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CADASTRO_FORMA_PAGAMENTO + "/listar.jsp") 
	})
	public String listar() throws Exception {
		setResultadoConsulta(cadastroServico.listarTodasFormasPagamento());
		return SUCCESS;
	}

	@Action(value = "abrirIncluir", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CADASTRO_FORMA_PAGAMENTO + "/incluir.jsp") 
	})
	public String abrirIncluir() throws Exception {
		return SUCCESS;
	}

	@Action(value = "confirmarInclusao", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CADASTRO_FORMA_PAGAMENTO + "/confirmarInclusao.jsp") 
	})
	public String confirmarInclusao() throws Exception {
		return SUCCESS;
	}
	
	@Action(value = "incluir", results = {
		@Result(name = SUCCESS, params = {"actionName", "listar"}, type = "redirectAction") 
	})
	public String incluir() throws Exception {
		addActionMessage(getText("geral.mensagem.incluir", new String[]{NOME_ENTIDADE_SINGULAR}));
		cadastroServico.salvar(getForma());
		return SUCCESS;
	}

	@Action(value = "abrirAlterar", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CADASTRO_FORMA_PAGAMENTO + "/alterar.jsp"),
		@Result(name = INPUT, params = {"actionName", "consultar"}, type = "redirectAction")
	})
	public String abrirAlterar() throws Exception {
		FormaPagamento formaPagamentoBD = cadastroServico.getFormaPagamento(forma.getId());
		if (formaPagamentoBD == null) {
			addActionError(getText("geral.mensagem.get", new String[]{NOME_ENTIDADE_SINGULAR}));
			return INPUT;
		}
		setForma(formaPagamentoBD);
		return SUCCESS;
	}

	@Action(value = "confirmarAlteracao", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CADASTRO_FORMA_PAGAMENTO + "/confirmarAlteracao.jsp") 
	})
	public String confirmarAlteracao() throws Exception {
		return SUCCESS;
	}
	
	@Action(value = "alterar", results = {
		@Result(name = SUCCESS, params = {"actionName", "listar"}, type = "redirectAction") 
	})
	public String alterar() throws Exception {
		addActionMessage(getText("geral.mensagem.alterar", new String[]{NOME_ENTIDADE_SINGULAR}));
		cadastroServico.alterar(getForma());
		return SUCCESS;
	}

	/*
	@Action(value = "confirmarExclusao", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CADASTRO_FORMA_PAGAMENTO + "/confirmarExclusao.jsp") 
	})
	public String confirmarExclusao() throws Exception {
		return SUCCESS;
	}

	@Action(value = "excluir", results = {
		@Result(name = SUCCESS, params = {"actionName", "listar"}, type = "redirectAction") 
	})
	public String excluir() throws Exception {
		addActionMessage(getText("geral.mensagem.excluir", new String[]{NOME_ENTIDADE_SINGULAR}));
		return SUCCESS;
	}
	*/

	public String getNomeEntidadeSingular() {
		return NOME_ENTIDADE_SINGULAR;
	}
	
	public String getNomeEntidadePlural() {
		return NOME_ENTIDADE_PLURAL;
	}

	public FormaPagamento getForma() {
		return forma;
	}

	public void setForma(FormaPagamento forma) {
		this.forma = forma;
	}

	public List<FormaPagamento> getResultadoConsulta() {
		return resultadoConsulta;
	}

	public void setResultadoConsulta(List<FormaPagamento> resultadoConsulta) {
		this.resultadoConsulta = resultadoConsulta;
	}
}
